/*********************************
*-- 33 KDH Knieja ---------------*
*-- im. Harcerzy Września 1939 --*
*-- autor: Marcin Rzepisko ------*
*-- data: 2013-11-12 ------------*
**********************************/

package net.kdh.knieja.dao.klasy.sqlgenerator;

import net.kdh.knieja.dao.klasy.filtry.FiltrDAO;
import net.kdh.knieja.model.system.Post;

/**
 *
 * @author rz.marcin@gmail.com
 */
public class PostSqlGenerator extends SqlGenerator<Post> {

    public PostSqlGenerator() {
        super("POSTY", "K_ARTYKULY");
    }
    
    /**
     * 
     * @param post
     * @return id_postu, id_artykulu, id_uzytkownika, data_utw, tresc, id_edytowanego_postu, usuniety
     */
    @Override
    public String generujSelect(FiltrDAO filtr) {
        String query = "SELECT id_postu, id_artykulu, id_uzytkownika, data_utw, tresc, id_edytowanego_postu, usuniety FROM :nazwaTabeli"
                .replaceFirst(":nazwaTabeli", getNazwaTabeli());
        if (filtr == null) {
            return query;
        }
        query += "WHERE :warunki";
        return query.replaceFirst(":warunki", filtr.generujWarunkiSQL());
    }

    @Override
    public String generujInsert(Post post) {
        String query = "INSERT INTO :nazwaTabeli (id_postu, id_artykulu, id_uzytkownika, tresc, data_utw, id_edytowanego_postu, usuniety)"
                + " VALUES (:idPostu, :idArtykulu, :idUzytkownika, ':tresc', ':dataUtworzenia', :id_edytowanego_postu, :usuniety) ";
        if (post.getIdEdytowanegoPostu() != null && !"".equals(post.getIdEdytowanegoPostu())) {
            query = query.replaceFirst(":id_edytowanego_postu", post.getIdEdytowanegoPostu());
        }
        if (post.isUsuniety() != null) {
            query = query.replaceFirst(":usuniety", (post.isUsuniety() ? "1" : "0"));
        }

        return query.replaceFirst(":nazwaTabeli", getNazwaTabeli())
                .replaceFirst(":idPostu", post.getIdPostu())
                .replaceFirst(":idArtykulu", post.getIdArtykulu())
                .replaceFirst(":idUzytkownika", post.getIdAutora())
                .replaceFirst(":tresc", post.getTresc())
                .replaceFirst(":dataUtworzenia", post.getDataUtworzenia().toString());
    }

    @Override
    public String generujUpdate(Post post) {
        String query = "UPDATE :nazwaTabeli SET :parametry WHERE id_postu = :idPostu".replaceFirst(":nazwaTabeli", getNazwaTabeli());
        String parametry = "";

        if (post.getTresc() != null && !"".equals(post.getTresc())) {
            parametry += ":: tresc = " + post.getTresc() + " ::";
        }
        if (post.getIdEdytowanegoPostu() != null && "".equals(post.getIdEdytowanegoPostu())) {
            parametry += ":: id_edytowanego_postu = '" + post.getIdEdytowanegoPostu() + "' ::";
        }
        if (post.isUsuniety() != null) {
            parametry += ":: usuniety = " + (post.isUsuniety() ? 1 : 0) + " ::";
        }
        return query.replace(":parametry",
                parametry.replaceAll("::::", ", ")
                .replaceAll("::", "")).replaceFirst(":idPostu", post.getIdPostu());
    }

    @Override
    public String generujDelete(String t_id) {
        String query = "DELETE FROM :nazwaTabeli WHERE id_postu = :idPostu".replaceFirst(":nazwaTabeli", getNazwaTabeli());
        return query.replaceFirst(":idPostu", t_id);
    }
}
